/**
  * 4.2 数组
  * 4.2.1 定长数组
  * 如果需要一个定长数组， 可以使用 Scala 中的 Array， Array 以 java 数组
  * 的方式实现。
  * val nums = new Array[Int](10)
  * 4.2.2 变长数组
  * 变长数组可以使用 ArrayBuffer， Java 中有 ArrayList，
  * import scala.collection.mutable.ArrayBuffer
  * val b = ArrayBuffer[Int]()
  * Array 与 ArrayBuffer 的互转：
  * ArrayBuffer = Array.toBuffer Array = ArrayBuffer.toArray\
  * 数组遍历:
  * for (i <- 0 until a.length)
  * println(i + ": " + a(i))
  * for (elem <- a)
  * println(elem)
  * 4.2.3 数组转换
  * 转换动作不会修改原数组， 而是产生一个新的数组。
  * 4.2.4 多维数组
  * 和 Java 一样， 多维数组通过数组的数组来实现， 可以用 ofDim 方法。
  * val matrix = Array.ofDim[Double](3, 4)
  * 赋值：
  * matrix(row)(column) = 17.29
  * 4.2.5 和 Java 数组的互操作
  * Scala 数组是通过 Java 进行实现的， 所以可以进行互相转换操作， 使用
  * scala.collection.convert. AsJavaConverters 或者 AsScalaConverters 进行转换
  * import scala.collection.JavaConverters._
  * import scala.collection.mutable.ArrayBuffer大数据技术之 Scala 程序设计解析
  * 29
  * val command = ArrayBuffer("ls", "-al", "/")
  * val pb = new ProcessBuilder(command.asJava) // Scala to Java
  * val cmd : Buffer[String] = pb.command().asScala // Java to Scala
  * cmd == command
  */
val a = Array(2, 3, 5, 7, 11)

// 产生新的数组
val result = for (elem <- a) yield 2 * elem


for (elem <- a if elem % 2 == 0) yield 2 * elem


a.filter(_ % 2 == 0).map(2 * _)


// 常用方法
import scala.collection.mutable.ArrayBuffer

// 求和
Array(1, 7, 2, 9).sum

//最大排序
ArrayBuffer("Mary", "had", "a", "little", "lamb").max

val b = ArrayBuffer(1, 7, 2, 9)

//排序
val bSorted = b.sorted

val a1 = Array(1, 7, 2, 9)

scala.util.Sorting.quickSort(a1)

a1

// 形成String
a1.mkString(" and ")

a1.mkString("<", ",", ">")

a1.toString

b.toString

import scala.collection.mutable.ArrayBuffer

// 更多方法
val a2 = Array(1, -2, 3, -4, 5)
val b2 = ArrayBuffer(1, 7, 2, 9)

// 统计大于0的个数
a2.count(_ > 0)

//
b2.append(1, 7, 2, 8)

b2

b2.appendAll(a2)

b2

b2 += 4 -= 7

b2

//将b2中的数据copy到a2中，a2的空间为5
b2.copyToArray(a2)
a2

val xs = Array(1, "Fred", 2, 9)
b2.copyToArray(xs)
xs

b2
// 加到20项，用-1填充
b2.padTo(20, -1)

(1 to 10).padTo(20, -1) // Note that the result is a Vector, not a Range